package qshell

import (
	"fmt"
	"time"

	"github.com/Knetic/govaluate"
)

// TesLoadShell 加载测试 shell 命令
func TesLoadShell(s *Shell) {
	// 初始化 cmd 命令
	c := s.Cmd("test", nil)

	c.ClauseNext("now", func(ctx Context, s []string) {
		panic("test_err")
	})

	c.ClauseNext("err", func(ctx Context, s []string) {
		try(func() {
			var a int
			fmt.Println(1 / a)
		})
	})
	c.ClauseNext("his", func(ctx Context, s []string) {
		ctx.Println("")
	})

	c.ClauseNext("show", func(ctx Context, s []string) {
		ctx.Println("args:", s)
		ctx.Println("args:", s)
		ctx.Println("args:", s)
	}).ClauseSame("time", func(ctx Context, s []string) {
		nowTimeStr := time.Now().Format("2006-01-02 15:04:05")
		ctx.Println("args:", nowTimeStr)
	}).ClauseSame("time1", func(ctx Context, s []string) {
		nowTimeStr := time.Now().Format("2006-01-02 15:04:05")
		ctx.Println("args1:", nowTimeStr)
	})

}

// LoadMathShell 加载默认 shell 命令
func LoadMathShell(s *Shell) {

	s.Cmd("node", nil).
		ClauseSame("out", func(ctx Context, args []string) {
			s.NodeOut()
		}).ClauseSame("start", func(ctx Context, args []string) {
		s.Node(args...)
	})

	s.Cmd("math", func(ctx Context, args []string) {
		var expression string
		for _, i := range args {
			expression = expression + i
		}
		expr, err := govaluate.NewEvaluableExpression(expression)
		if err != nil {
			fmt.Println("表达式无效：", err)
			return
		}
		result, err := expr.Evaluate(nil)
		if err != nil {
			fmt.Println("表达式无效：", err)
			return
		}
		fmt.Println("计算结果为：", result)
	})
}
